﻿using System;
using System.Globalization;
using System.Windows.Controls;

namespace RotovapPlatform.UI.Validation
{
	/// <summary>
	/// 代理验证规则，用于在ValidationRule中使用绑定
	/// </summary>
	public class ProxyValidationRule : ValidationRule
	{
		/// <summary>
		/// 最小值代理
		/// </summary>
		public DependencyObjectProxy MinValueProxy { get; set; }

		/// <summary>
		/// 最大值代理
		/// </summary>
		public DependencyObjectProxy MaxValueProxy { get; set; }

		/// <summary>
		/// 错误消息代理
		/// </summary>
		public DependencyObjectProxy ErrorMessageProxy { get; set; }

		/// <summary>
		/// 验证方法
		/// </summary>
		public override ValidationResult Validate(object value, CultureInfo cultureInfo)
		{
			string strValue = value as string;

			// 允许空值，由其他验证规则处理
			if (string.IsNullOrEmpty(strValue))
				return ValidationResult.ValidResult;

			// 尝试转换为数值
			if (!double.TryParse(strValue, NumberStyles.Any, cultureInfo, out double doubleValue))
				return new ValidationResult(false, "请输入有效的数字");

			// 从代理获取最小值和最大值
			double minValue = MinValueProxy?.Data is double min ? min : double.MinValue;
			double maxValue = MaxValueProxy?.Data is double max ? max : double.MaxValue;
			string errorMessage = ErrorMessageProxy?.Data is string msg ? msg : "值必须在 {0} 和 {1} 之间";

			// 验证范围
			if (doubleValue < minValue)
				return new ValidationResult(false, $"输入值 {doubleValue} 小于最小值 {minValue}");

			if (doubleValue > maxValue)
				return new ValidationResult(false, $"输入值 {doubleValue} 大于最大值 {maxValue}");

			return ValidationResult.ValidResult;
		}
	}
}